package com.lin.genericstest;
/**
 * 1.泛型通配符
 * 2.泛型受限（泛型上限： 表示参数化的类型可能是所指定类型，或者是其子类,泛型下限：使用的泛型只能是本类及其父类类型上应用的时候，就必须使用泛型的下限。)
 * 3.泛型与子类继承: 一个类的子类可以通过对象多态性，为其父类实例化，但是在泛型操作中，子类的泛型类型是无法使用父类的泛型类型接受的，例如，Info<String>不能使用 Info<Object>接收。
 * @author Zhang
 *
 * @param <T>
 */


class Info<T>{
	private T var;

	public Info(T var) {
		super();
		this.var = var;
	}

	public T getVar() {
		return var;
	}

	public void setVar(T var) {
		this.var = var;
	}
	 public String toString() {
		 return this.var.toString();
	}
}
public class GenericsSomeDemo {
	/**泛型通配符<?>*/
	public static void fun(Info<?> info){
		System.out.println(info);
	}
	/**泛型受限*/
	//泛型受限（泛型上限： 表示参数化的类型可能是所指定类型，或者是其子类。）
	public static void funUp(Info<? extends Number> info){
		System.out.println(info);
	}
	//泛型受限(泛型下限：使用的泛型只能是本类及其父类类型上应用的时候，就必须使用泛型的下限。)
	public static void funLow(Info<? super Integer> info){
		System.out.println(info);
	}
	public static void main(String[] args) {
		Info info = new Info("你好");
		fun(info);
		Info<Integer> info2 = new Info(1000);
		fun(info2);
	}
}
